//package com.plian.system.service.ra.estatevariation;
//
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.plian.Tools.StringUtil;
//import com.plian.Tools.TokenUtil;
//import com.plian.Tools.UuidUtil;
//import com.plian.Tools.pagedata.PageData;
//import com.plian.system.config.exception.MyRuntimeException;
//import com.plian.system.constant.sys.FormTypeConstant;
//import com.plian.system.dao.ra.estateregistration.EstateRegistrationDao;
//import com.plian.system.dao.ra.estatevariation.EstateVariationDao;
//import com.plian.system.dao.ra.estatevariationsubli.EstateVariationSubliDao;
//import com.plian.system.dao.sys.orgzation.OrgzationDao;
//import com.plian.system.model.CommonCode;
//import com.plian.system.model.ListResult;
//import com.plian.system.model.ObjResult;
//import com.plian.system.model.page.Page;
//import com.plian.system.service.sys.code.IFormCodeService;
//import com.plian.system.service.sys.file.FileService;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang.exception.ExceptionUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.util.Collections;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//
//import static com.plian.system.constant.sys.FormStatusConstant.*;
//
//@Slf4j
//@Service
//public class EstateVariationService {
//    @Autowired
//    EstateVariationDao estateVariationDao;
//    @Autowired
//    EstateVariationSubliDao estateVariationSubliDao;
//    @Autowired
//    EstateRegistrationDao estateRegistrationDao;
//    @Autowired
//    OrgzationDao orgzationDao;
//    @Autowired
//    FileService fileService;
//    @Autowired
//    IFormCodeService formCodeService;
//    /**
//     * 保存
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult save(PageData pd) {
//        try {
//            pd.put("id", UuidUtil.get32UUID());
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            pd.put("createTime", new Date());
//            pd.put("createUser", TokenUtil.getTokenUserId());
//            pd.put("updateTime", new Date());
//            pd.put("updateUser", TokenUtil.getTokenUserId());
//            pd.put("reportTime", new Date());
//            pd.put("formType", FormTypeConstant.RA_ESTATE_VARIATION);
//            pd.put("code",formCodeService.getCode(FormTypeConstant.RA_ESTATE_VARIATION));
//            estateVariationDao.save(pd);
//            fileService.edit(pd.getString("id"), (List<HashMap>) pd.get("list_doc"));
//            ObjectMapper mapper = new ObjectMapper();
//            List<PageData> listSubli = mapper.convertValue((List<PageData>) pd.get("listSubli"), new TypeReference<List<PageData>>() {
//            });
//            if (listSubli != null && listSubli.size() > 0) {
//                saveSubli(listSubli, pd.getString("id"));
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 修改
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult edit(PageData pd) {
//        try {
//            pd.put("updateTime", new Date());
//            pd.put("updateUser", TokenUtil.getTokenUserId());
//            pd.put("reportTime", new Date());
//            estateVariationDao.edit(pd);
//            fileService.edit(pd.getString("id"), (List<HashMap>) pd.get("list_doc"));
//            estateVariationSubliDao.delByParent(pd.getString("id"));
//            ObjectMapper mapper = new ObjectMapper();
//            List<PageData> listSubli = mapper.convertValue((List<PageData>) pd.get("listSubli"), new TypeReference<List<PageData>>() {
//            });
//            if (listSubli != null && listSubli.size() > 0) {
//                saveSubli(listSubli, pd.getString("id"));
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 保存从表
//     *
//     * @param list
//     * @param parentId
//     * @throws Exception
//     */
//    public void saveSubli(List<PageData> list, String parentId) throws Exception {
//        if (list != null && list.size() > 0) {
//            for (int i = 0; i < list.size(); i++){
//                PageData pageData = list.get(i);
//                pageData.put("estateVariationId", parentId);
//                //老数据id不变
//                if (StringUtil.isBlank(pageData.getString("id"))){
//                    pageData.put("id", UuidUtil.get32UUID());
//                }
//                pageData.put("sort", i);
//            }
//            estateVariationSubliDao.saveAll(list);
//        }
//    }
//
//
//    /**
//     * 单据详情
//     *
//     * @param pd
//     * @return
//     */
//    public ObjResult findbyid(PageData pd) {
//        try {
//            ObjResult objResult;
//            PageData p = estateVariationDao.findbyid(pd.getString("id"));
//            List<PageData> listSubli = estateVariationSubliDao.findById(pd.getString("id"));
//           if(listSubli.size()>0){
//               p.put("listSubli", listSubli);
//           }
//            objResult = new ObjResult(CommonCode.SUCCESS);
//            objResult.setPageData(p);
//            return objResult;
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 根据id删除
//     *
//     * @param ids
//     * @return
//     */
//    public ObjResult del_ids(List<String> ids) {
//        try {
//            estateVariationDao.del_ids(ids);
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException(new ObjResult(CommonCode.ERROR));
//        }
//    }
//
//    /**
//     * 查询列表
//     *
//     * @return
//     */
//    public ListResult list(PageData pd) {
//        ListResult listResult;
//        try {
//            pd.put("orgId", TokenUtil.getTokenOrgId());
//            Page page = new Page(true, pd);
//            List<PageData> list = estateVariationDao.list(page);
//            listResult = new ListResult(CommonCode.SUCCESS);
//            listResult.setList(list);
//            listResult.setTotal(page.getTotal());
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            listResult = new ListResult(CommonCode.ERROR);
//        }
//        return listResult;
//    }
//
//    /**
//     * 提交
//     *
//     * @param ids
//     * @return
//     */
//    public ObjResult submit(List<String> ids) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(FINISH));
//            pageData.put("id", ids);
//            estateVariationDao.refer(pageData);
//            for (String formId:
//                    ids) {
//                variation(formId);
//            }
//            return new ObjResult(CommonCode.SUCCESS);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            return new ObjResult(CommonCode.ERROR);
//        }
//    }
//
//    /**
//     * 退回单据
//     *
//     * @param formId 单据id
//     */
//    public void reject(String formId) throws Exception {
//        PageData pageData = new PageData();
//        pageData.put("status", String.valueOf(REJECT));
//        pageData.put("id", Collections.singletonList(formId));
//        estateVariationDao.refer(pageData);
//    }
//
//    /**
//     * 审批完成
//     *
//     * @param formId
//     */
//    public void finish(String formId) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("status", String.valueOf(FINISH));
//            pageData.put("id", Collections.singletonList(formId));
//            estateVariationDao.refer(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException("单据流转完成时修改单据状态失败！");
//        }
//    }
//
//    /**
//     * 工作流
//     *
//     * @param formIds 单据ids
//     */
//    public List<PageData> findByIds(List<String> formIds) {
//        try {
//            PageData pageData = new PageData();
//            pageData.put("ids", formIds);
//            return estateVariationDao.findByIds(pageData);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//            throw new MyRuntimeException("根据单据id列表查询报表失败！");
//        }
//    }
//
//    public void variation(String id) throws Exception {
//        PageData pageData = estateVariationDao.findbyid(id);
//        String estateregistrationId = pageData.getString("estateregistrationId");
//        //找到所有需要调整的项目
//        List<PageData> listSubli = estateVariationSubliDao.findById(id);
//        PageData esPd = estateRegistrationDao.findbyid(estateregistrationId);
//        for (PageData subliPd:
//                listSubli) {
//            esPd.put(subliPd.getString("estatevariationType"),subliPd.getString("afterTheChangeValue"));
//        }
//        estateRegistrationDao.edit(esPd);
//    }
//
//    /**
//     * 回退状态单据
//     */
//    public void goBackToStash(String formId) {
//        try {
//            PageData p = estateVariationDao.findbyid(formId);
//            p.put("status",UNREVIEWED);
//            estateVariationDao.edit(p);
//        } catch (Exception e) {
//            log.error(ExceptionUtils.getFullStackTrace(e));
//        }
//    }
//}
